package 力扣题库;

public class p622设计循环队列 {
    class MyCircularQueue {
        private int[] arr;
        private int front;//
        private int rear;//当前 可以存放元素的下标

        public MyCircularQueue(int k) {
            this.arr=new int[k];
            this.front=0;
            this.rear=0;
        }

        //入队列
        public boolean enQueue(int value) {
            //当队列为满，返回false
            if (isFull()) return false;
            this.arr[this.rear]=value;
            this.rear=(this.rear+1)%this.arr.length;
            return true;
        }

        //删除队头元素,指向队头的指针到下一个即可
        public boolean deQueue() {
            //当队列为空，返回false
            if (isEmpty()) return false;
            this.front=(this.front+1)%this.arr.length;
            return true;
        }

        //查看队头元素
        public int Front() {
            //当队列为空，返回-1
            if (isEmpty()) return -1;
            return this.arr[this.front];

        }

        //查看队尾元素
        public int Rear() {
            //当队列为空，返回-1
            if (isEmpty()) return -1;
            int index=(this.rear==0) ? this.arr.length-1:this.rear-1;
            return this.arr[index];
        }

        //判断是否为空
        public boolean isEmpty() {
            //两指针相遇，则为空
            if (this.rear==this.front) {
                return true;
            }
            return false;
        }

        //判断是否为满
        public boolean isFull() {
            //rear的下一个位置等于front ,则为满
            if ((this.rear+1)%this.arr.length==this.front) {
                return true;
            }
            return false;
        }
    }
}
